package play

import (
	"fmt"
)

func RunArray() {
	//声明一个数组
	var a [3]int
	a = [3]int{1, 2, 3}
	//声明并赋值
	var b [3]int = [3]int{1, 2, 3}
	//声明并赋值(省略类型)
	var c = [3]int{1, 2, 3}
	//声明并赋值简写
	d := [3]int{1, 2, 3}

	//GO中将数组长度作为数组类型的一部分
	//e与f是两个类型不同的变量，他们之间不能进行赋值操作
	var e [2]int
	var f [3]int

	//指定下标初始零值，将最后一个元素设置为1
	var g [20]int = [20]int{19: 1}

	//使用...让GO自动计算数组长度
	h := [...]int{1, 2, 3, 4, 5}

	//GO自动计算所需的数组长度，同变量g
	i := [...]int{19: 1}

	//数组的元素是指针，j数组的元素是指向int的指针
	aa := 1
	bb := 2
	j := [...]*int{&aa, &bb}

	//指向数组的指针
	k := [5]int{1, 2, 3, 4, 5}
	//m是一个指向数组的指针
	var m *[5]int = &k

	//数组的比较
	n := [2]int{1, 2}
	o := [2]int{1, 2}

	//通过new返回一个指向数组的指针
	p := new([2]int)
	//也可以使用[]进行赋值
	p[0], p[1] = 1, 2

	//多维数组，二行二列
	q := [2][2]int{{1, 2}, {3, 4}}

	//自动计算多维数组，必须是顶级
	r := [...][2]int{{1, 2}, {3, 4}, {5, 6}}

	fmt.Printf("%v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n%v\n", a, b, c, d, e, f, g, h, i, j, m)
	//进行数组比较
	fmt.Println(n == o)
	fmt.Println(p)
	fmt.Println(q)
	fmt.Println(r)
}
